# -*- coding：utf-8 -*-
"""
@Time:2024-08-1818:28
@Auth:泛彼泊舟
@File:6、反射之添加或覆盖.py
@IDE:PyCharm
@模块功能：xxx
"""
"""
反射的原理：
- 基于面向对象的基础，通过使用字符串对象对应对象中的具体某个属性和方法
- 可以对实例对象属性或者方法进行修改或者调用（增删改查）

通过setattr()内置函数完成对象的新增方法和覆盖原来的方法
- 作用域仅限于该对象本身
"""


class A:
    def a(self):
        print("a方法被调用了")

    def b(self):
        print("b方法被调用了")

    def c(self):
        print("c方法被调用了")

    def d(self):
        print("d方法被调用了")


def func():
    print("func被调用啦")


x = A()
y = A()
# 给对象添加新的方法：前提必须要有该方法或者函数的引用
# setattr(对象,添加的方法名,方法引用)
setattr(x, "e", input)
password = x.e("请输入你的密码：")  # e() = inoput()
print(password)

setattr(y, "w", func)
y.w()
# 给对象设置的方法，仅限于被设置的对象本身，对类没有影响
# y.e()

# 覆盖原有的方法
setattr(x, "a", print)
x.a("我不是原本的a方法")
# 被反射之后的对象调用方法时，会被覆盖之前的方法或属性

